home *** CD-ROM | disk | FTP | other *** search
- #include "global.h"
-
- #include <intuition/gadgetclass.h>
-
- #include <proto/intuition.h>
- #include <proto/gadtools.h>
- #include <proto/exec.h>
- #include <stdio.h>
- #include <string.h>
-
- struct NewGadget ng[] =
- {
- { 20, 100, 60, 15, "OK", &topaz8, 0, PLACETEXT_IN, 0L, 0L }, // OK
- { 100, 100, 60, 15, "Cancel", &topaz8, 1, PLACETEXT_IN, 0L, 0L }, // Cancel
- { 60, 15, 140, 15, "Text:", &topaz8, 2, PLACETEXT_LEFT, 0L, 0L }, // Text
- { 20, 35, 100, 60, "Place Text:", &topaz8, 3, PLACETEXT_RIGHT, 0L, 0L } // Text
- };
-
- BOOL DoubleIText(LinkNode *objPtr)
- {
- Window *winPtr;
- Gadget *context, *stringGadget, *gadgPtr, *placeGadget;
- char tempStr[MAX_TEXT_LEN], *strPtr;
- ULONG class, textPos;
- USHORT code, gadgID;
- IntuiMessage *message;
- BOOL done = FALSE, isGadget, doPlaceText;
-
- winPtr =
- OpenWindowTags(0L,
- WA_Left, 20,
- WA_Top, 20,
- WA_Width, 300,
- WA_Height, 150,
- WA_IDCMP, WIND_IDCMP,
- WA_Flags, WFLG_DRAGBAR | WFLG_ACTIVATE |
- WFLG_SMART_REFRESH | WFLG_NOCAREREFRESH,
- WA_Title, "Edit IText Object:",
- WA_PubScreen, gPubScreen,
- TAG_DONE);
-
- if (!winPtr)
- {
- printf("failed to open a window\n");
- return FALSE;
- }
-
- if (!CreateContext(&context))
- {
- printf("createContext() failed\n");
- goto itext_done;
- }
- gadgPtr = context;
-
- isGadget = GetGadgetData(objPtr, 0L, 0L, 0L, 0L, 0L );
-
- strPtr = GetItemText(objPtr);
- if (strPtr)
- strcpy(tempStr, strPtr);
-
- if (objPtr->type == OTYPE_IText || objPtr->type == OTYPE_Text)
- doPlaceText = FALSE;
- else
- {
- doPlaceText = TRUE;
- textPos = GetTextPlacement( objPtr );
- }
-
- ng[0].ng_VisualInfo = (APTR) gVI;
- ng[1].ng_VisualInfo = (APTR) gVI;
- ng[2].ng_VisualInfo = (APTR) gVI;
- ng[3].ng_VisualInfo = (APTR) gVI;
-
- gadgPtr = CreateGadget(BUTTON_KIND, gadgPtr, &ng[0], TAG_DONE);
- gadgPtr = CreateGadget(BUTTON_KIND, gadgPtr, &ng[1], TAG_DONE);
- stringGadget = gadgPtr = CreateGadget(STRING_KIND, gadgPtr, &ng[2],
- GTST_String, tempStr,
- GTST_MaxChars, MAX_TEXT_LEN - 1,
- TAG_DONE);
- if (doPlaceText)
- placeGadget = gadgPtr = CreateGadget(MX_KIND, gadgPtr, &ng[3],
- GTMX_Labels, gPlaceText,
- GTMX_Active, textPos,
- GTMX_Spacing, 3,
- TAG_DONE);
-
- AddGList(winPtr, context, -1, -1, 0L);
- RefreshGList(context, winPtr, 0L, -1);
- GT_RefreshWindow(winPtr, 0L);
-
- while (!done)
- {
- Wait(1 << winPtr->UserPort->mp_SigBit);
- while (message = GT_GetIMsg(winPtr->UserPort))
- {
- class = message->Class;
- code = message->Code;
- if (class == GADGETUP || class == GADGETDOWN)
- gadgID = ((Gadget *) message->IAddress)->GadgetID;
- GT_ReplyIMsg(message);
- switch(class)
- {
- case GADGETUP:
- if (gadgID == 0) // the OK button
- {
- if (isGadget)
- {
- if (strPtr)
- strcpy( strPtr,
- ( (struct StringInfo *)stringGadget->SpecialInfo)->Buffer);
- ((GadgetObj *) objPtr)->flags =
- ( ((GadgetObj *) objPtr)->flags & 0xFFFFFFE0 ) |
- ( 1 << textPos );
-
- MakeGadget(objPtr);
-
- // if there are any current ListView connections to this gadget,
- // update them
-
- UpdateLVConnect(objPtr, FALSE);
-
- ReDraw();
- }
- else if ( objPtr->type == OTYPE_IText )
- {
- ITextObj *iTextPtr = (ITextObj *) objPtr;
-
- strcpy(strPtr,
- ( (struct StringInfo *)stringGadget->SpecialInfo)->Buffer);
- iTextPtr->rect.maxX = iTextPtr->rect.minX +
- IntuiTextLength(&iTextPtr->iText);
- ReDraw();
- }
- done = TRUE;
- }
- else if (gadgID == 1)
- {
- done = TRUE;
- }
- break;
- case GADGETDOWN:
- if (gadgID == 3)
- {
- textPos = code;
- }
- break;
- }
- }
- }
-
-
- itext_done:
-
- if (winPtr)
- CloseWindow(winPtr);
-
- if (context)
- FreeGadgets(context);
- }